这个补码对应的原码" />

位运算之左移右移运算之详解

您所在的位置:网站首页 php 左移 位运算之左移右移运算之详解

位运算之左移右移运算之详解

2023-05-12 17:31| 来源: 网络整理| 查看: 265

先看如下一段左移右移的代码及其结果:

代码 #include "stdio.h"

char leftshift(char i, int n){ if(n 这个补码对应的原码为:1000 1000  对应十进制:-8 左移四位: 1111 0000   -> 这个补码对应的原码为:1001 0000  对应十进制:-16 左移五位: 1110 0000   -> 这个补码对应的原码为:1010 0000  对应十进制:-32 左移六位: 1100 0000   -> 这个补码对应的原码为:1100 0000  对应十进制:-64 左移七位: 1000 0000   -> 这个补码对应的原码为:1000 0000  对应十进制:-128 左移八位: 0000 0000   -> 这个补码对应的原码为:0000 0000  对应十进制:0 注: 原码到补码的计算方式:取反+1, 补码到原码的计算方式:-1再取反。 数据-1,它的原码为1000 0001,补码为1111 1111 左移一位: 1111 1110   -> 这个补码对应的原码为:1000 0010  对应十进制:-2 左移二位: 1111 1100   -> 这个补码对应的原码为:1000 0100  对应十进制:-4 左移三位: 1111 1000   -> 这个补码对应的原码为:1000 1000  对应十进制:-8 左移四位: 1111 0000   -> 这个补码对应的原码为:1001 0000  对应十进制:-16 左移五位: 1110 0000   -> 这个补码对应的原码为:1010 0000  对应十进制:-32 左移六位: 1100 0000   -> 这个补码对应的原码为:1100 0000  对应十进制:-64 左移七位: 1000 0000   -> 这个补码对应的原码为:1000 0000  对应十进制:-128 左移八位: 0000 0000   -> 这个补码对应的原码为:0000 0000  对应十进制:0 可以看出127和-1的结果完全一样。移位操作与正负数无关,它只是忠实的将所有位进行移动,补0,舍弃操作。 右移操作(>>) 规则:

左边空出的位用0或者1填补。正数用0填补,负数用1填补。注:不同的环境填补方式可能不同;

低位右移溢出则舍弃该位。

1、127的补码:0111 1111

右移一位: 0011 1111   -> 原码同补码一样  对应十进制:63

右移二位: 0001 1111   -> 原码同补码一样  对应十进制:31

右移三位: 0000 1111   -> 原码同补码一样  对应十进制:15

右移四位: 0000 0111   -> 原码同补码一样  对应十进制:7

右移五位: 0000 0011   -> 原码同补码一样  对应十进制:3

右移六位: 0000 0001   -> 原码同补码一样  对应十进制:1

右移七位: 0000 0000   -> 原码同补码一样  对应十进制:0

右移八位: 0000 0000   -> 原码同补码一样  对应十进制:0

2、-128的补码:1000 0000

右移一位: 1100 0000   -> 这个补码对应的原码为:1100 0000  对应十进制:-64

右移二位: 1110 0000   -> 这个补码对应的原码为:1010 0000  对应十进制:-32

右移三位: 1111 0000   -> 这个补码对应的原码为:1001 0000  对应十进制:-16

右移四位: 1111 1000   -> 这个补码对应的原码为:1000 1000  对应十进制:-8

右移五位: 1111 1100   -> 这个补码对应的原码为:1000 0100  对应十进制:-4

右移六位: 1111 1110   -> 这个补码对应的原码为:1000 0010  对应十进制:-2

右移七位: 1111 1111   -> 这个补码对应的原码为:1000 0001  对应十进制:-1

右移八位: 1111 1111   -> 这个补码对应的原码为:1000 0001  对应十进制:-1

常见应用 左移相当于*2,只是要注意边界问题。如char a = 65; a


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3